/* * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is available at * http://www.sun.com/ * * The Original Code is Forte for Java, Community Edition. The Initial * Developer of the Original Code is Sun Microsystems, Inc. Portions * Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved. */ package org.openide.options; import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; import java.beans.PropertyChangeEvent; import java.util.*; /** Extends the functionality of <CODE>SystemOption</CODE> * by providing support for veto listeners. * * @author Jaroslav Tulach * @version 0.11 Dec 6, 1997 */ public abstract class VetoSystemOption extends SystemOption { /** generated Serialized Version UID */ static final long serialVersionUID = -614731095908156413L; /** vetoable listener property */ private static final String PROP_VETO_SUPPORT = "vetoSupport"; // NOI18N /** Default constructor. */ public VetoSystemOption() {} /** Lazy getter for veto hashtable. * @return the hashtable */ private HashSet getVeto () { HashSet set = (HashSet)getProperty (PROP_VETO_SUPPORT); if (set == null) { set = new HashSet (); putProperty (PROP_VETO_SUPPORT, set); } return set; } /** Add a new veto listener to all instances of this exact class. * @param list the listener to add */ public final void addVetoableChangeListener (VetoableChangeListener list) { synchronized (getLock ()) { getVeto ().add (list); } } /** Remove a veto listener from all instances of this exact class. * @param list the listener to remove */ public final void removeVetoableChangeListener (VetoableChangeListener list) { synchronized (getLock ()) { getVeto ().remove (list); } } /** Fire a property change event. * @param name the name of the property * @param oldValue the old value * @param newValue the new value * @exception PropertyVetoException if the change is vetoed */ public final void fireVetoableChange ( String name, Object oldValue, Object newValue ) throws PropertyVetoException { PropertyChangeEvent ev = new PropertyChangeEvent ( this, name, oldValue, newValue ); Iterator en; synchronized (getLock ()) { en = ((HashSet)getVeto ().clone ()).iterator (); } while (en.hasNext ()) { ((VetoableChangeListener)en.next ()).vetoableChange (ev); } } } /* * Log * 5 Gandalf 1.4 1/12/00 Ian Formanek NOI18N * 4 Gandalf 1.3 10/22/99 Ian Formanek NO SEMANTIC CHANGE - Sun * Microsystems Copyright in File Comment * 3 Gandalf 1.2 6/8/99 Ian Formanek ---- Package Change To * org.openide ---- * 2 Gandalf 1.1 3/22/99 Jesse Glick [JavaDoc] * 1 Gandalf 1.0 1/5/99 Ian Formanek * $ */